import org.junit.Test;

import java.util.LinkedList;

/**
 * description :
 * author Ahang :
 * create : 2025-08-20 19:50
 */
public class LinkedListDemo {
    /**
     * @Description: public void addFirst(E e):将指定元素插入此列表的开头。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test1() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        list.addFirst("python"); // 在索引1的位置插入"python
        System.out.println(list); // 输出: [python, hello, world, java]
    }

    /**
     * @Description: public void addLast(E e):将指定元素添加到此列表的结尾。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test2() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        list.addLast("python"); // 在索引1的位置插入"python
        System.out.println(list); // 输出: [hello, world, java, python]
    }

    /**
     * @Description: public E getFirst():返回此列表的第一个元素。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test3() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String firstElement = list.getFirst(); // 获取第一个元素
        System.out.println(firstElement); // 输出: hello
    }

    /**
     * @Description: public E getLast():返回此列表的最后一个元素。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test4() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String lastElement = list.getLast(); // 获取最后一个元素
        System.out.println(lastElement); // 输出: java
    }

    /**
     * @Description: public E removeFirst():移除并返回此列表的第一个元素。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test5() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String firstElement = list.removeFirst(); // 移除并返回第一个元素
        System.out.println(firstElement); // 输出: hello
        System.out.println(list); // 输出: [world, java]
    }

    /**
     * @Description: public E removeLast():移除并返回此列表的最后一个元素。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test6() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String lastElement = list.removeLast(); // 移除并返回最后一个元素
        System.out.println(lastElement); // 输出: java
        System.out.println(list); // 输出: [hello, world]
    }

    /**
     * @Description:- public E pop():从此列表所表示的堆栈处弹出一个元素。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test7() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        String firstElement = list.pop(); // 移除并返回第一个元素
        System.out.println(firstElement); // 输出: hello
        System.out.println(list); // 输出: [world, java]
    }

    /**
     * @Description: public void push(E e):将元素推入此列表所表示的堆栈。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test8() {
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        list.push("python"); // 在索引1的位置插入"python
        System.out.println(list); // 输出: [python, hello, world, java]
    }
    /**
     * @Description: public boolean isEmpty()：如果列表没有元素，则返回true。
     * @Param:
     * @return:
     * @Author: ahang
     * @Date: 2025/8/20
     */
    @Test
    public void test9(){
        LinkedList<String> list = new LinkedList<>();
        list.add("hello");
        list.add("world");
        list.add("java");
        boolean isEmpty = list.isEmpty(); // 检查列表是否为空
        System.out.println(isEmpty); // 输出: false
        list.clear(); // 清空列表
        isEmpty = list.isEmpty(); // 再次检查是否为空
        System.out.println(isEmpty); // 输出: true
    }

}

